package com.kun;

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.args.ListPosition;

//测试Redis的List数据结构
public class Test02_List {

    @Test
    public void testList() {
        Jedis jedis = JedisUtils.getJedis();
        jedis.flushDB();

        //1. 列表添加内容
        jedis.lpush("list1", "1", "2", "3");//左侧添加
        System.out.println(jedis.lrange("list1", 0, -1));//获取全部内容：321
        jedis.rpush("list1", "4", "5", "6");//右侧添加
        System.out.println(jedis.lrange("list1", 0, -1));//获取全部内容：321456

        //2. 移除元素
        System.out.println(jedis.lpop("list1"));//移除左侧第一个元素：3
        System.out.println(jedis.rpop("list1"));//移除右侧第一个元素：6
        System.out.println(jedis.lrange("list1", 0, -1));//获取全部内容：2145

        //3. 根据下标获取元素
        System.out.println(jedis.lindex("list1", 1));   //获取下标为1的元素：1

        //4. 获取列表长度
        System.out.println(jedis.llen("list1"));     //获取列表长度：4

        //5. 移除指定值
        jedis.lrem("list1", 1, "2");   //移除1个值为2的元素
        System.out.println(jedis.lrange("list1", 0, -1));//获取全部内容：145

        //6. 截断列表
        jedis.ltrim("list1", 0, 1);   //截断列表，只保留下标为0和1的元素
        System.out.println(jedis.lrange("list1", 0, -1));//获取全部内容：14

        //7. 组合命令
        jedis.rpoplpush("list1", "list1");   //将list1右侧第一个元素移到list1左侧
        System.out.println(jedis.lrange("list1", 0, -1));//获取全部内容：41

        //8. 通过下标更新list元素
        System.out.println(jedis.exists("list1"));  //判断list1是否存在,返回true
        jedis.lset("list1", 0, "0");   //将下标为0的元素更新为0
        System.out.println(jedis.lrange("list1", 0, -1));//获取全部内容：01

        //9.插入值
        jedis.linsert("list1", ListPosition.AFTER, "0", "4");   //在下标为0的元素后面插入值为34的元素
        System.out.println(jedis.lrange("list1", 0, -1));//获取全部内容：041
        jedis.linsert("list1", ListPosition.BEFORE, "0", "5");   //在下标为0的元素前面插入值为5的元素
        System.out.println(jedis.lrange("list1", 0, -1));//获取全部内容：5041

        //10. 删除list
        jedis.keys("*").forEach(key -> System.out.print(key+" ")); //输出所有keys
        jedis.del("list1");   //删除list1
        jedis.keys("*").forEach(key -> System.out.print(key+" ")); //输出所有keys

        JedisUtils.closeJedis(jedis);
    }


}
